Optimize gdk_x11_screen_supports_net_wm_hint()
authorJohn Lindgren <john.lindgren@aol.com>
Sun, 23 Jun 2013 19:22:13 +0000 (21:22 +0200)
committerBenjamin Otte <otte@redhat.com>
Sun, 23 Jun 2013 19:25:26 +0000 (21:25 +0200)
Move the call to gdk_x11_atom_to_xatom_for_display() outside of the
search loop in gdk_x11_screen_supports_net_wm_hint().  In my test case
(running Audacious for about a minute), this reduced the total number of
hash table lookups performed from 370,000 to 230,000.

https://bugzilla.gnome.org/show_bug.cgi?id=702913

gdk/x11/gdkscreen-x11.c

index 760da2ba4df53f5e4cde6647ccac3de7cd420585..804b18ed1a13abc6fef45d4bacb6aca9274e479b 100644 (file)
@@ -1470,6 +1470,7 @@ gdk_x11_screen_supports_net_wm_hint (GdkScreen *screen,
   GdkX11Screen *x11_screen;
   NetWmSupportedAtoms *supported_atoms;
   GdkDisplay *display;
+  Atom atom;
 
   g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
 
@@ -1521,13 +1522,12 @@ gdk_x11_screen_supports_net_wm_hint (GdkScreen *screen,
   if (supported_atoms->atoms == NULL)
     return FALSE;
 
-  i = 0;
-  while (i < supported_atoms->n_atoms)
+  atom = gdk_x11_atom_to_xatom_for_display (display, property);
+
+  for (i = 0; i < supported_atoms->n_atoms; i++)
     {
-      if (supported_atoms->atoms[i] == gdk_x11_atom_to_xatom_for_display (display, property))
+      if (supported_atoms->atoms[i] == atom)
         return TRUE;
-
-      ++i;
     }
 
   return FALSE;